class Animal{
    public String name;
    public int age;
    public void eat(){
        System.out.println(this.name+" 正在吃~");
    }

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
class Dog extends Animal{
    //Alt键 加上 Enter键快速生成子类构造方法
    public Dog(String name, int age) {
        super(name, age);
    }
    @Override//注解  用于帮助检查方法重写是否正确，若重写的方法有问题，他就会报错
    public void eat(){
        System.out.println(this.name+"正在吃狗粮~");//与父类的eat形成 方法的重写
    }

    public void bark(){
        System.out.println(this.name+" 正在汪汪汪~");
    }
}
class Bird extends Animal{
    public Bird(String name, int age) {
        super(name, age);
    }

    public void qiqi(){
        System.out.println(this.name+" 正在吱吱吱~");
    }
    public void eat(){
        System.out.println(this.name+"正在吃鸟粮~");//与父类的eat形成 方法的重写
    }
}

public class Test {
    public static void func(Animal animal){

    }
    public static Animal func2(){
        return new Dog("旺财",3);
    }

    public static void main(String[] args) {
/*        Dog dog=new Dog();
        Animal animal=dog;//向上转型*//*
        Animal animal1=new Dog("旺财",3);//向上转型
        animal1.eat();

        Animal animal2=new Bird("小蜂",1);
        animal2.eat();
        //animal1.bark();//会报错，因为Animal中没有bark方法，通过父类引用只能访问父类自己的有的*/

        Animal animal1=new Dog("旺财",3);//向上转型
//        Dog dog=(Dog)animal1;//向下转型 要将对象animal1强转成Dog类，否则会报错
        //因为 不是所有的动物都是狗

    }
}
